Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Search found 0 matches
Author Message
  Topic: PHP и модульное тестирование
Антон Макаренко

Replies: 8
Views: 7720

PostForum: Разное :: PHP   Posted: Tue Sep 16, 2008 12:57 am   Subject: PHP и модульное тестирование
Написали несколько пачек тестов на [url=http://www.phpunit.de/manual/3.3/en/index.html]PHPUnit, работают отлично. Уже получили реальную выгоду от их использования - найдены серьезные баги, которые вылезли из-за изменений в скриптах.
Планируется организовать "круиз-контроль" - например все за день накоммитят кучу всего, а ночью запускаются юнит-тесты. И утром отчет: кто что поломал :)
Нужды в mock-объектах пока не испытывали.

Особенно удобно тестировать разного рода API. Причем, PHPUnit позволяет организовать тестирование API одним и тем же деревом тестов, но с разными "прокладками" (если предусмотрено подключение к API разными способами).

Сначала было трудно понять, с чего начать. Начали с тупого передирания юнит-тестов Zend Framework'а. Затем все это упростилось, устаканилось.
  Topic: Ещё раз про классы, надеюсь последний:)
Антон Макаренко

Replies: 10
Views: 7003

PostForum: Разное :: PHP   Posted: Tue Sep 16, 2008 12:36 am   Subject: Ещё раз про классы, надеюсь последний:)
Городить огород с классами приходится тогда, когда не хватает возможностей функций.
Возьмем к примеру Zend_Cache - почитайте документацию, оцените для себя удобство использования таких конструкций, как

$cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);
// ...
Zend_Cache::get();

или

<?php
// предполагается, что переменная $cache уже установлена

$id = 'myBigLoop'; // идентификатор того, что мы хотим закэшировать

if (!($data = $cache->load($id))) {
// промах кэша

$data = '';
for ($i = 0; $i < 10000; $i++) {
$data = $data . $i;
}

$cache->save($data);

}

// [...] делаем что-либо с данными (отображение, передача и т.д.)

(все взято из мануала)

Наследование, перегрузка методов и атрибутов - вот где кроется удобство ООП. Инкапсуляция, интерфейсы - это основа надежного ...
  Topic: __autoload() с кешированием
Антон Макаренко

Replies: 8
Views: 23055

PostForum: Разное :: PHP   Posted: Tue Sep 16, 2008 12:26 am   Subject: __autoload() с кешированием
Залил в шапку следующую версию.

class_exists() запускается со вторым параметром false, чтобы не вызывать __autoload() рекурсивно
добавлена возможность использовать include вместо require
  Topic: PHP и модульное тестирование
Антон Макаренко

Replies: 8
Views: 7720

PostForum: Разное :: PHP   Posted: Mon Jul 28, 2008 2:03 pm   Subject: PHP и модульное тестирование
Прошло много времени, обе системы изменились - подниму топик.

Дано: огромный програмный продукт на php, полностью объектно ориентированный. Без автоматических тестов начинает разваливаться под давлением багов.
Думаем, что выбрать: PhpUnit, PhpUnit2 или SimpleTest.
Кто-то уже пользовался?

[upd]
PhpUnit2 кажется отпадает - не поддерживаются Mock-объекты
  Topic: SourceForge Community Choice Awards
Антон Макаренко

Replies: 0
Views: 2721

PostForum: Прочее   Posted: Tue Jul 08, 2008 12:35 am   Subject: SourceForge Community Choice Awards
SF учредил конкурс 2008 Community choice awards для проектов с открытыми исходниками: sourceforge.net/community/cca08-vote
Проголосовал за Drupal (Best Project) и за Magento (Best New Project).
А вы?
  Topic: __autoload() с кешированием
Антон Макаренко

Replies: 8
Views: 23055

PostForum: Разное :: PHP   Posted: Thu Jun 19, 2008 1:21 am   Subject: __autoload() с кешированием
чтобы при кешировании сам убирал все вызовы require_once
Думаю, что смысл есть делать это лишь в общеобразовательных целях. Неужели в реально работающем проекте захочется допускать такое шаманство?
  Topic: Интерфейс пользователя для закачки на сервер и скачки файлов с сервера
Антон Макаренко

Replies: 4
Views: 5126

PostForum: Разное :: PHP   Posted: Fri Jun 13, 2008 3:06 pm   Subject: Интерфейс пользователя для закачки на сервер и скачки файлов с сервера
Да какая разница, в тарелке каша или в кастрюле? :0)
Если она несъедобная, можно сразу в унитаз выбросить.
  Topic: Изменить динамический адрес страницы на "статический"
Антон Макаренко

Replies: 16
Views: 8657

PostForum: Прочее   Posted: Sun Jun 01, 2008 4:11 pm   Subject: Изменить динамический адрес страницы на "статический"
А по качеству кода как? =)
Для меня этот вопрос слишком провокационный. Так что воздержусь от комментариев :)
  Topic: Изменить динамический адрес страницы на "статический"
Антон Макаренко

Replies: 16
Views: 8657

PostForum: Прочее   Posted: Sun Jun 01, 2008 2:36 pm   Subject: Изменить динамический адрес страницы на "статический"

40$ в час
$39.99 в час
29$ в час

Ого, какие москвичи дорогие. Не сравнить с аутсорсерами из голодной Индии.
  Topic: Изменение глобальных переменных через .htaccess
Антон Макаренко

Replies: 11
Views: 17999

PostForum: Разное :: PHP   Posted: Sun Jun 01, 2008 2:03 pm   Subject: Изменение глобальных переменных через .htaccess
Было дело - интегрировал Drupal с другим движком. Тот движок положил в document root, а drupal - в папку /_drupal/ Мне нужно было, чтобы стартовая страница обрабатывалась именно движком drupal'а:

RewriteEngine on

# rewrite /
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /_drupal/index.php?q=$1 [L,QSA]

Но это еще не все. К остальным файлам — css, javascript, картинкам — тоже нужно обращаться, как если бы они были в document root; плюс хочется сохранить родные ЧПУ друпала. Я за основу взял фичу "Search pages in more than one directory", описанную в
# поиск более чем в одной папке
# rewrite non-existing files, that exist in /_drupal/
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+) $1 [L]
RewriteCond %{DOCUMENT_ROOT}/_drupal%{REQUEST_URI} -f
RewriteRule ^(.+) /_drupal/$1 [L]

# а это уже родное правило друпа ...
  Topic: 49. Оптимизируем загрузку PHP-кода в 22 раза, или почему FastCGI не ускоряет PHP
Антон Макаренко

Replies: 52
Views: 121770

PostForum: Наблы :: Куроводство   Posted: Sun Jun 01, 2008 4:40 am   Subject: 49. Оптимизируем загрузку PHP-кода в 22 раза, или почему FastCGI не ускоряет PHP
Начнут ведь в первую очередь тратить время на склеивание скриптов.
Извините, что перебиваю дискуссию профессионалов, я вот написал [url=http://forum.dklab.ru/viewtopic.php?p=156550#156550]склеивающий __autoload() и получил тем самым массу удовольствия.
  Topic: __autoload() с кешированием
Антон Макаренко

Replies: 8
Views: 23055

PostForum: Разное :: PHP   Posted: Sun Jun 01, 2008 4:38 am   Subject: __autoload() с кешированием
Функция автоматически инклудит файлы с классами, см.
require 'lib/__autoload.php';

"Full-featured"-вариант:

// setup include path
if (!defined('PATH_SEPARATOR'))
define('PATH_SEPARATOR', getenv('COMSPEC')? ';' : ':');
ini_set('include_path', ini_get('include_path')
. PATH_SEPARATOR . dirname(__FILE__) . '/lib'
. PATH_SEPARATOR . dirname(__FILE__) . '/sys/classes'
);

// initiate autoload
define('__AUTOLOAD_CACHE_DIR', 'cache/classes');
define('__AUTOLOAD_MUTEX_FILE', 'cache/__is_autoload');
require 'lib/__autoload.php';
register_shutdown_function('__autoload');


Именование и пути
Именование классов и структура их папок/файлов должна соответствовать соглашениям по именованию, применяемых в Zend Framework:

Имена классов могут содержать только буквенно-числовые символы. ... Символы нижнего подчеркивания допустимы в местах разделителей пути - имя файла "Ze ...
  Topic: [wish] Первое сообщение всегда первое на странице
Антон Макаренко

Replies: 2
Views: 13376

PostForum: Предложения по организации форума   Posted: Thu May 08, 2008 9:59 pm   Subject: [wish] Первое сообщение всегда первое на странице
Предлагаю сделать возможность "прилепить" первое сообщение в теме, чтобы оно отображалось на каждой странице темы.
Готовый алгоритм можно подсмотреть, правда у мода для phpbb3:
http://www.phpbb.com/mods/db/index.php?i=misc&mode=display&contrib_id=3175

Полезна такая фича была бы в форумах готовых решений. На многих форумах релизеры часто "обновляют в шапке".
  Topic: Функция QSA для URL
Антон Макаренко

Replies: 6
Views: 7799

PostForum: Разное :: PHP   Posted: Thu Apr 03, 2008 11:16 am   Subject: Функция QSA для URL
echo qsarray( array( 'test' => 'val', 'multi' => array( 1, 7 ) ), '?test=10&multi[]=1&multi[]=20&a=100', array( 'a' ) );
выдаст

%3Ftest=10&test=val&multi%5B0%5D=1&multi%5B1%5D=7
без url-кодирования это выглядит так:
?test=10&test=val&multi[0]=1&multi[1]=7

знак вопроса в начале строки запроса писать не следует (см. $_SERVER
test=val&multi%5B0%5D=1&multi%5B1%5D=7
т.е.
test=val&multi[0]=1&multi[1]=7


Насчет двух функций - мне так показалось логичным, если функция позиционируется как аналог QSA в Апаче.

QSA в Апаче использует один аргумент, о массивах речь не идет
qsarray() создана для того, чтоб не вызывать qsa несколько раз, например qsa('var2', 'value2', qsa('var1', 'value1'))

Вобщем, название qsarray() самодостаточно и не противоречит qsa()
  Topic: Функция QSA для URL
Антон Макаренко

Replies: 6
Views: 7799

PostForum: Разное :: PHP   Posted: Wed Apr 02, 2008 10:09 pm   Subject: Функция QSA для URL
Обновил функцию в шапке.
Изменения:

(bugfix) переменные, определенные в exclude, удаляются из запроса даже если параметры qsa пустые
рег. выражения заменены стандартными parse_str() и http_build_query()
(feature) в результате поддерживается многомерный массив параметров
  Topic: Функция QSA для URL
Антон Макаренко

Replies: 6
Views: 7799

PostForum: Разное :: PHP   Posted: Wed Apr 02, 2008 10:44 am   Subject: Функция QSA для URL
Миша Спларов
Хорошая идея, попробую переписать с использованием parse_str() и http_build_query()
  Topic: Функция QSA для URL
Антон Макаренко

Replies: 6
Views: 7799

PostForum: Разное :: PHP   Posted: Wed Apr 02, 2008 12:38 am   Subject: Функция QSA для URL
Вот как бы упростить эту кучу регулярных выражений?

$reg_expressions['/&' . $var . '=[^&]+/'] = '';
$reg_expressions['/&' . $var . '=/'] = '';
$reg_expressions['/&' . $var . '/'] = '';
  Topic: Функция QSA для URL
Антон Макаренко

Replies: 6
Views: 7799

PostForum: Разное :: PHP   Posted: Wed Apr 02, 2008 12:36 am   Subject: Функция QSA для URL
Функция, добавляет/заемещает/удаляет переменные из строки GET-параметров. Нечто похожее на модификатор $variables
Массив переменных => значений. Логика для каждой переменной такая:
- если значение null, то переменная удаляется из строки
- если пустое, то добавляется/заменяется именем переменной без знака "="
- если со значением, то добавляется/заменяется, а значение экранируется с помощью urlencode()

$query_string
Собственно, строка запроса, в которой проводить изменения. По умолчанию $_SERVER$exclude_vars
Массив имен переменных, которых по умолчанию удалять из строки. Задается только если вызвать функцию с $exclude_vars не равным null; при этом запоминается в статическую переменную.


<?php
/**
* The same as qsarray(), but for one variable only
*
* @param string $var_name
* @param string $var_value
* @param string $query_string
* @param array $exclude_vars
* @return string
*/
function qsa($var_name, $var_value = null, $query_string = nul ...
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Mon Mar 31, 2008 10:05 am   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
mlitkin
Вы правы, я перепутал ХП и ХФ.
DbSimple ... основан на mysql_ (а не на mysqli_) процедурах, в которых вызов ХП не поддерживается
Вот и первый повод включить mysqli в DbSimple.
  Topic: PHP4 : Один из способов организации работы с БД через DBsimple
Антон Макаренко

Replies: 1
Views: 3583

PostForum: Разное :: PHP   Posted: Fri Mar 28, 2008 4:15 pm   Subject: PHP4 : Один из способов организации работы с БД через DBsimple
Решил поднять топик, освежив его упрощенным аналогом синглтона под php5
<?php
class Db_Single
{
private static $_singleton_instance;

private function __construct()
{
}

public static function init($dsn = null)
{
if (isset(self::$_singleton_instance))
return self::$_singleton_instance;
self::$_singleton_instance = DbSimple_Generic::connect($dsn);
return self::$_singleton_instance;
}
}

Соответственно, в локальной области видимости доступ к объекту получаем таким способом:
$db = Db_Single::init();
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Fri Mar 28, 2008 3:23 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
SELECT FROM SYS_GET_SYNC_TABLE_COLUMNS(1)
DbSimple тут причем?
  Topic: Функция для создания уменьшенной копии изображения - обсуждение 2
Антон Макаренко

Replies: 8
Views: 12709

PostForum: Разное :: PHP   Posted: Wed Mar 26, 2008 2:14 am   Subject: Функция для создания уменьшенной копии изображения - обсуждение 2
Maus
Gif-анимацию срезает (обновил документацию) и превращает в GIF87a. Реализовать ресайз анимированной гифки можно с помощью ImageMagick. Что-то нет желания встраивать его в функцию, хотя не мешало бы :)

Доработал функцию, чтобы она сохраняла прозрачность и полупрозрачность, а изображения до 256 цветов не переводила в truecolor (актуально для индексированного png).

(в исходном посте)
  Topic: Функция для создания уменьшенной копии изображения
Антон Макаренко

Replies: 12
Views: 60450

PostForum: Склад готовых решений :: PHP   Posted: Tue Mar 25, 2008 1:03 am   Subject: Функция для создания уменьшенной копии изображения
Готовое решение с альтернативной функциональностью.

Ужимает изображение из файла в файловой системе. Возвращает содержимое, или же записывает в указанный файл и возвращает NULL.
Новые размеры и mime-тип изображения будут записаны в переменную, переданную по ссылке в аргументе.
Поддерживается jpeg, gif, png.
Сохраняет прозрачность/полупрозрачность для gif и png. Экономно сохраняет png, если он индексирован (от 1 до 256 цветов).
Gif-анимацию урезает до первого кадра.
(!) Бросается эксепшенами при любых ошибках, с подробным объяснением причины.

Пример для получения содержимого:

$image_info = array();
$raw_data = constrain_image('test.jpg', 800, 600, $image_info);
// $raw_data содержит новое изображение в бинарном виде
// $image_info содержит новые ширину и высоту, а также тип изображения
list($new_w, $new_h, $mime_type) = $image_info;


Пример для создания файла-миниатюры:

$image_info = array();
constrain_image('test.png', 150, ...
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Sun Mar 23, 2008 11:17 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
Yurij
"как получить id с которым была добавлена строка?" (PostgreSQL)
Если метод query() не возвращает требуемого значения, Вам не повезло: придется читать документацию к БД и выяснять, как это делается.
Например, в БД Firebird для получения уникального автоинкремента, я использую генераторы. Т.е. сначала селектим из генератора:
SELECT FIRST 1 GEN_ID(GEN_AIT_USER, 1) FROM RDB$DATABASE
Полученное значение вставляем вместе с остальными полями. Что примечательно, генератор работает независимо от транзакций, поэтому гарантированно возвращает уникальное значение.

Полагаю, что "sequence" в PostgreSQL, по смыслу - тот же, что и генератор в Фаерберде.
Полезным в администрировании может оказаться IBExpert - последняя версия вроде поддерживает PostgreSQL.

з.ы. RDB$DATABASE - база с метаданными Фаерберда. Как говорил старина Кодд, каждая реляционная СУБД должна содержать свои метаданные в виде реляционных же данных.
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Sun Mar 23, 2008 11:02 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
Юрик
1. Как в первой строчке может возникнуть ошибка, если запрос корректен?
В приведенном Вами коде в условии if (!@$DB->query... проверяется, возвращает ли пустое значение вызовом этого метода, ни более того. В данном случае UPDATE возвращает количество измененных строк. Ноль измененных строк не означает наличие ошибки.
// Здесь идет реакция на ошибку, если она возникла.
// Контекст ошибки можно получить через $DB->error.
Проверяйте, была ли ошибка запроса, с помощью такой конструкции:

// после каждого запроса в $DB->error будет либо null, либо массив
if (null !== $DB->error)
{
// обработка ошибки
}



2. Если UPDATE фактически не меняет запись, то есть если значение $field идентично тому, которое уже содердится в данной записи
Не вижу никакой логической связи (там еще условие WHERE).
Ок, допустим.
то обновление строки не производится и возвращается нуль
Возвращается ноль. И то, это не документированная возможность DbSimple, а ...
  Topic: Как сделать дерево? (Работа с массивами)
Антон Макаренко

Replies: 4
Views: 5134

PostForum: Разное :: PHP   Posted: Mon Mar 03, 2008 5:46 pm   Subject: Как сделать дерево? (Работа с массивами)
После того как я начал использовать AS ARRAY_KEY / AS PARENT_KEY в не используется рекурсия.
А рекурсивные алгоритмы — пожалуйста: http://forum.dklab.ru/search.html?q=%EC%E0%F1%F1%E8%E2+%E4%E5%F0%E5%E2%EE&sort_by=5&nospam=GEN_BY_JS
  Topic: Переход с денвера на другой сервер на Windows
Антон Макаренко

Replies: 3
Views: 4148

PostForum: Разное :: PHP   Posted: Fri Feb 29, 2008 11:06 am   Subject: Переход с денвера на другой сервер на Windows
manfredi
Откройте мануал функции mktime и почитайте: http://ua2.php.net/manual/ru/function.mktime.php

В частности:
Внимание: до PHP 5.1.0 отрицательные метки времени не поддерживались под всеми системами Windows, а также некоторыми другими. Следовательно, допустимые значения параметра year были между 1970 и 2038.
Скорее всего, дело не в Апаче, а в версии php. Посмотрите, какая версия в Денвере и какая на сервере Вашем.

Лично для меня такая неопределенность:
не поддерживались под всеми системами Windows, а также некоторыми другими.
является сигналом к тому, чтобы искать более надежное альтернативное решение.
  Topic: Отправка писем с аттачментами (пример)
Антон Макаренко

Replies: 48
Views: 122821

PostForum: Разное :: PHP   Posted: Thu Feb 28, 2008 6:31 pm   Subject: Отправка писем с аттачментами (пример)
По секрету скажу, что сам пользуюсь куда более развитой версией библиотеки (она написана уже только для php5). Пока еще не решаюсь ее выложить, потестировать хочу.

В теле сообщения
В таком случае content-disposition надо указывать "inline".
  Topic: BBcode теперь в PECL
Антон Макаренко

Replies: 0
Views: 2780

PostForum: Разное :: PHP   Posted: Thu Feb 28, 2008 10:11 am   Subject: BBcode теперь в PECL
Вот наткнулся
http://ua2.php.net/manual/ru/ref.bbcode.php
http://pecl.php.net/package/bbcode

1.0.0 stable 2008-02-11
PHP 5.2.0 or newer
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Sun Feb 24, 2008 1:43 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
l_nagash
Если запрос был insert, то mysql возвращает значение вставленного автоинкремента, если такой был предусмотрен. И метод query() его возвращает.

$new_id = $db->query('INSERT ...');


select MAX(id) нельзя делать ни в коем случае.
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Mon Feb 04, 2008 12:09 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
Что если сделать версию DbSimple для php5, где можно было бы включать режим "бросаться эксепшенами" в случае ошибки запроса?
Например:

$DB = DbSimple_Generic::connect(CFG_DSN);
$DB->enable_exceptions();


В некоторых ситуациях так и задумано, чтобы запрос мог возвращать ошибку. В таком случае можно добавить метод disable_exceptions(), а также добавить в оба метода параметры с возможностью комбинирования.

$DB->enable_exceptions(); // включить режим эксепшенов
$DB->enable_exceptions(2); // включить режим эксепшенов только на 2 запроса. Затем *вернуть как было*
$DB->disable_exceptions(); // выключить
$DB->disable_exceptions(1); // выключить только на один следующий запрос, а затем *вернуть как было*

Впрочем, ничего не мешает программисту поставить лишний try-catch в таком случае.

В сам объект-эксепшн можно поместить всю полезную информацию, которая сейчас хранится в атрибуте $DB->error (при этом ...
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Fri Jan 11, 2008 3:03 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
pav
В таком экзотическом случае я бы не погнушался вставить число без плейсхолдера. Или может стоит переопределить функцию в классе-наследнике (если такое возможно)?
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Wed Jan 09, 2008 1:29 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
LIMIT зашкалило
А как это "зашкалило"?

В таком случае "зашкалит" и второй подзапрос в фаербёрде, так как там нет встроенной функции SELECT FOUND_ROWS()
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Fri Jan 04, 2008 12:07 pm   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
В selectPage() нет смысла делать подзапрос, подсчитывающий количество найденных строк, когда найдено ноль строк.

/* отработал первый запрос из selectPage() */
-- 1 ms; returned 0 row(s)
SELECT FOUND_ROWS()
-- 0 ms; returned ('0')
  Topic: Визуальное редактирование структуры базы MySQL (fabForce DB Designer и EMS MySQL Manager).
Антон Макаренко

Replies: 32
Views: 96954

PostForum: Общие вопросы :: SQL   Posted: Thu Jan 03, 2008 4:35 pm   Subject: Визуальное редактирование структуры базы MySQL (fabForce DB Designer и EMS MySQL Manager).
Поддержка у EMS качественная, убедился сам. Купил их SQL-manager, а все равно повседневно использую SQL-Front, бывший MySQL-Front.

Как известно, проект MySQL-Front был остановлен. Но недавно он был восстановлен под новым именем "SQL-Front" http://www.sql-front.com/
Разработчик у программы один и он активно выкладывает новые билды чуть ли не каждый день. Фичи добавляются, баги фиксятся.
Рекомендую.
  Topic: Отправка писем с аттачментами (пример)
Антон Макаренко

Replies: 48
Views: 122821

PostForum: Разное :: PHP   Posted: Thu Dec 27, 2007 11:14 pm   Subject: Отправка писем с аттачментами (пример)
Выкладываю пример работающего, проверенного скрипта (+ необходимые библиотеки) отправки письма с аттачами.

send_me.php - там в начале конфигурация константами. Надо все заполнить.
В SMTP_HELO надо написать PTR или хотя бы IP-адрес компьютера, с которого отправляешь.

letter_subject.txt - тема письма

letter_message.txt - сообщение. Там поддерживаются переменные {field_0}, {field_1} и так далее.

Везде кодировка UTF-8.

Требования: PHP5, short_tags=On
Поддерживается аутентификация только CRAM-MD5 и LOGIN

PTR определяется так:

tracert 72.14.207.99

В ответ видим:
Tracing route to eh-in-f99.google.com

Тут сам скрипт, остальное в аттаче.
<?php
// UTF-8
// define config variables
define('BASE_DIR', dirname(__FILE__));
define('LIBS_DIR', BASE_DIR . '/lib');

define('SMTP_HOST', '');
define('SMTP_HELO', '');
define('SMTP_LOGIN', '');
define('SMTP_PASSWORD', '');

define('SMTP_MA ...
  Topic: Отправка писем с аттачментами (пример)
Антон Макаренко

Replies: 48
Views: 122821

PostForum: Разное :: PHP   Posted: Sun Sep 16, 2007 10:30 pm   Subject: Отправка писем с аттачментами (пример)
Slik
О возможностях дебага - два поста назад: http://forum.dklab.ru/viewtopic.php?p=138858#138858
Воспользуйтесь ими - посмотрите лог SMTP. Если хотите, чтобы Вам помогли, выкладывайте этот лог (и другую нужную по Вашему мнению информацию).
  Topic: Функция автоматической замены
Антон Макаренко

Replies: 5
Views: 4299

PostForum: Разное :: PHP   Posted: Mon Jul 30, 2007 9:53 am   Subject: Функция автоматической замены
SDEVIL
Попробуйте такое готовое решение: http://forum.dklab.ru/php/advises/PodsvechivanieHttpReferencesInTheText.html
  Topic: Проблема при получении результата выполнения внешней программы
Антон Макаренко

Replies: 5
Views: 7423

PostForum: Разное :: PHP   Posted: Fri Jul 27, 2007 12:48 pm   Subject: Проблема при получении результата выполнения внешней программы
Если версия dimagolov верна, то достаточно в обе команды добавить конструкцию, заставляющую их выводить результат в stdout.
  Topic: DbSimple v2.x: лаконичная работа с различными СУБД
Антон Макаренко

Replies: 571
Views: 748665

PostForum: Конструктор   Posted: Fri Jul 27, 2007 9:27 am   Subject: DbSimple v2.x: лаконичная работа с различными СУБД
Как показывают опыты, при открытой транзакции нужно в функции ibase_prepare() и ibase_query() вместо link-идентификатора давать идентификатор транзакции:

$sql = 'INSERT INTO TEST_TABLE VALUES (?, ?)';
ibase_query($sql, 10, 'Test10'); // вставляется в контексте дефолтовой транзакции

$res_trans = ibase_trans();
$res_prepare = ibase_prepare($res_trans, $sql);
ibase_execute($res_prepare, 11, 'Test11');
//ibase_commit($res_trans);
ibase_rollback($res_trans); // rollback успешно отменяет вставку

ibase_query($sql, 12, 'Test12'); // строка также вставляется


В Ibase.php, функции _performQuery($queryMain), идентификатор транзакции не используется вообще. Такое впечатление, что о $this->trans "забыли": атрибут встречается только в методах _performTransaction(), _performCommit() и _performRollback().
(@version 2.x $Id: Ibase.php 163 2007-01-10 09:47:49Z dk $)


[upd]
Добавил поддержку $this->trans в Iba ...
 
Page 1 of 5 All times are GMT + 3 Hours
Goto page 1, 2, 3, 4, 5  Next
XML